/* --------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen -----------------------------
    File Name      : AddFunction.h
    Author         : Fortiortech  Appliction Team
    Version        : V1.0
    Date           : 2020-04-11
    Description    : This file contains all the common data types used for Motor Control.
----------------------------------------------------------------------------------------------------
                                       All Rights Reserved
------------------------------------------------------------------------------------------------- */
/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __AddFunction_H_
#define __AddFunction_H_

/******************************************************************************/
#include <FU68xx_4_Type.h>
/******************************************************************************/

/* Exported types ------------------------------------------------------------*/

typedef struct
{
    uint8 Run_flag;   //
    uint8 Brake_flag; //
    uint8 Vsp_time;   // 设置的目标位置
    uint8 Last_Stall; // 上次运行的位置
    uint8 Post_time;  // 上次运行的位置

    int16 New_post;  // 当前检测的位置
    int16 Set_post;  // 设置的目标位置
    int16 Last_post; // 上次运行的位置  发生堵转时候退回上次位置

    int16 Max_post;  // 最大开关角度
    uint16 Vsp_post; // 设置的目标位置
    uint16 Run_duty; // 运行duty设置 根据VCU发送的模式确定
    uint16 Vsp;      // 母线电压滤波后的高16位
    int16 Vsp_LSB;   // 母线电压滤波后的低16位
} UserSET;



typedef struct
{
    // voltage protect
    uint16 OverVoltDetecCnt;  // 过压检测计数
    uint16 UnderVoltDetecCnt; // 欠压检测计数
    uint16 VoltRecoverCnt;    // 过压恢复计数
    uint16 SensorVoltageCnt;  // 电压检测电路故障计数
    // stall protect
    uint16 Stall_COUNT; // 堵转计数值
    uint8 Stall_flag;   // 堵转计数值
    // Over Current protect
    uint16 OverCurrentCnt; // 过流检测计数
    uint16 OverheatCnt;    // 过流检测计数
    // Loss Phase protect
//    uint16 Lphasecnt;        // 缺相保护计时
//    uint16 AOpencnt;         // A缺相计数
//    uint16 BOpencnt;         // B缺相计数
//    uint16 COpencnt;         // C缺相计数
//    uint16 mcLossPHRecCount; // 缺相恢复计数

} FaultVarible;

typedef enum
{
    FaultNoSource = 0,      // 无故障
    FaultHardOVCurrent = 1, // 硬件过流    1
    FaultSoftOVCurrent = 2, // 软件过流    1
    FaultUnderVoltage = 3,  // 欠压保护    1
    FaultOverVoltage = 4,   // 过压保护    1
    FaultLossPhase = 5,     // 缺相保护
    FaultStall = 6,         // 堵转保护    1
    FaultStart = 7,         // 启动保护    1
    FaultOverwind = 8,      // 顺逆风失败保护
    FaultOverTemp = 9,      // 过温保护    1
		FaultTSD      =10,      // TSD过温保护
} FaultStateType;

typedef struct
{
    uint16 mcDcbusFlt;    // 母线电压滤波后的高16位
    int16 mcDcbusFlt_LSB; // 母线电压滤波后的低16位

    uint16 mcIbusADC;    // 读取的AD值，还没有减去偏置电压
    uint16 mcIbusFlt;    // 母线电流
    int16 mcIbusFlt_LSB; // 当前母线电流滤波以后的值

    uint8 ESDIVFlag;    // 除法执行标志位
    uint16 CtrlMode;    // 控制模式
    uint16 RunStateCnt; // 运行状态计数
    uint16 RunCurrent;  // 运行电流
    uint16 State_Count; // 电机各个状态的时间计数

    uint16 mcNtcTempFlt;    // NTC温度采集
    int16 mcNtcTempFlt_LSB; // 当前母线电流滤波以后的值

} FOCCTRL;

typedef struct
{
    uint16 TargetValue;  //设置运行的目标转速
    uint16 ActualValue;  //当前设备转速 方波为time1 bcor
    uint16 IncValue;     // PI运算增量
    uint16 DecValue;     // PI运算减小量
    uint16 DelayPeriod;  // PI运算计时
    uint16 SpeedScalerH; // 速度环算子高16bit
    uint16 SpeedScalerL; // 速度环算子低16bit
    uint16 SpeedBCOR;    // BCCR滤波以后的值BCOR
    uint16 SpeedFltBCOR; // 滤波后的电机转速
    uint8 LoopFlag;      //闭环标志位
    uint8 FlagONOFF;     // PI运算计时
	  uint16 Time_ms;       //test
} MCRAMP;

//typedef struct
//{
//    uint16 BL_Angle;       //该角度用于计算需要
//    uint16 BL_BCCR_ARR;    //该数值用于赋值给TIM4的定时器计数值，用于触发上溢中断
//    uint16 BL_delay_Count; //计数值，在切换至硬件运行以后进行一段时间计数，然后切换至150度运行
//} BL_150;


typedef struct
{
    uint32 ONOFF_Times; // 启停次数
    uint16 ON_Count;    // 运行时间计数
    uint16 OFF_Count;   // 停止时间计数
    uint8 ONOFF_Flag;   // 启停测试中启动标志位

    uint16 PowerOFF_Count; // 切换到STOP状态以后的动作等待事件
    uint16 Stopwait_Count; // 切换到STOP状态以后的动作等待事件
    uint8 StopFlag;        // 停止标志位
	  uint8 Time_ms;        //定时测试
	
} ONVarible;
/* Exported variables ---------------------------------------------------------------------------*/
extern bool idata FR;
extern FaultVarible xdata mcFaultDect;
//extern ProtectVarible xdata mcProtectTime;
extern ONVarible ONOFFTest;
extern FaultStateType xdata mcFaultSource;
extern FOCCTRL xdata mcFocCtrl;
extern MCRAMP idata MotorSpeed;



/* Exported functions ---------------------------------------------------------------------------*/
extern void Duty_Function(void); /*运行时duty调整*/
extern void Fault_Start(void);
extern void VariablesPreInit(void); /*初始化电机参数*/

extern void Fault_OverUnderVoltage(void);   /*过压欠压保护函数*/
extern void Fault_Overcurrent(void);        /*软件过流保护*/
extern void Fault_Stall(void);              /*堵转保护函数*/
extern void Fault_Detection(void);          /*电压检测函数*/
extern void Fault_OverTemp(void);           /*过热保护*/
extern void CheckCircuit(uint16 checktime); /*硬件电路检查*/
extern void AGS_Detection(void);            /*故障检测函数*/

extern int16 HW_Speed_PI(int16 Xn1); /*速度环*/

extern void FaultProcess(void);

extern void StarRampDealwith(void);

extern void LIN_handle(void);
extern void Self_Learn(void);          /*自学习函数*/
extern void Info_Send(uint8 ID);       /* LIN总线数据回复*/
extern void Master_computer(uint8 ID); /* LIN总线数据接收处理*/
#endif